home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Libraries / MacWT 0.04 / wt / table.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-31  |  1.8 KB  |  70 lines  |  [TEXT/MMCC]

  1. /*
  2. **  wt -- a 3d game engine
  3. **
  4. **  Copyright (C) 1994 by Chris Laurel
  5. **  email:  claurel@mr.net
  6. **  snail mail:  Chris Laurel, 5700 W Lake St #208,  St. Louis Park, MN  55416
  7. **
  8. **  This program is free software; you can redistribute it and/or modify
  9. **  it under the terms of the GNU General Public License as published by
  10. **  the Free Software Foundation; either version 2 of the License, or
  11. **  (at your option) any later version.
  12. **
  13. **  This program is distributed in the hope that it will be useful,
  14. **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. **  GNU General Public License for more details.
  17. **
  18. **  You should have received a copy of the GNU General Public License
  19. **  along with this program; if not, write to the Free Software
  20. **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. */
  22.  
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include "wtmem.h"
  26. #include "table.h"
  27.  
  28.  
  29. #define STARTING_TABLE_SIZE  16
  30.  
  31.  
  32. Table *new_table(size_t entry_size)
  33. {
  34.      Table *t;
  35.      
  36.      t = wtmalloc(sizeof(Table));
  37.      init_table(t, entry_size);
  38.  
  39.      return t;
  40. }
  41.  
  42.  
  43. void init_table(Table *t, size_t entry_size)
  44. {
  45.      t->entry_size = entry_size;
  46.      t->current_entries = 0;
  47.      t->max_entries = 0;
  48.      t->table = NULL;
  49. }
  50.  
  51.  
  52. void add_table_entry(Table *t, void *entry)
  53. {
  54.      if (t->current_entries >= t->max_entries) {
  55.       if (t->max_entries == 0) {
  56.            t->max_entries = STARTING_TABLE_SIZE;
  57.            t->table = wtmalloc(t->max_entries * t->entry_size);
  58.       } else {
  59.            t->max_entries = (t->current_entries * 3) / 2;
  60.            t->table = wtrealloc(t->table,
  61.                     t->max_entries * t->entry_size);
  62.       }
  63.      }
  64.  
  65.      memcpy((char *) t->table + t->entry_size * t->current_entries,
  66.         entry, t->entry_size);
  67.      t->current_entries++;
  68. }
  69.  
  70.